package network

import (
	"fmt"
	"net"
)

func ValidatePort(port int) bool {
	if port == 0 {
		return true
	}
	// 检查端口范围是否有效 (1-65535)
	if port < 1 || port > 65535 {
		return false
	}

	// 尝试同时绑定 TCP 和 UDP
	tcpAddr := fmt.Sprintf(":%d", port)
	udpAddr, _ := net.ResolveUDPAddr("udp", tcpAddr)

	// 测试 UDP 端口
	udpConn, err := net.ListenUDP("udp", udpAddr)
	if err != nil {
		return false
	}
	udpConn.Close()

	// 测试 TCP 端口
	tcpListener, err := net.Listen("tcp", tcpAddr)
	if err != nil {
		return false
	}
	tcpListener.Close()

	return true
}

func NewUDPConn(port int) (*net.UDPConn, error) {
	addr, err := net.ResolveUDPAddr("udp4", fmt.Sprintf(":%d", port))
	if err != nil {
		return nil, err
	}
	conn, err := net.ListenUDP("udp4", addr)
	if err != nil {
		return nil, err
	}
	return conn, nil
}
